package DAO;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import Beans.LogParcel;
import Utils.HibernateUtil;

public class LogParcelDao {
	private SessionFactory sessionFactory;

	public LogParcelDao() {
		sessionFactory = HibernateUtil.getSessionFactory();
	}

	Transaction tr = null;
	PackageDao packageDao = new PackageDao();
	
	/**
	 * 删除包裹日志
	 */
	public void delete(LogParcel logParcel) {
		Session session = sessionFactory.openSession();
		tr = session.beginTransaction();
		session.delete(logParcel);
		tr.commit();
		session.close();
	}
	
	/**
	 * 修改包裹日志
	 */
	public void edit(LogParcel logParcel) {
		Session session = sessionFactory.openSession();
		tr = session.beginTransaction();
		session.update(logParcel);
		tr.commit();
		session.close();
	}
	
	/**
	 * 保存新增的包裹日志
	 */
	public void save(LogParcel logParcel) {
		Session session = sessionFactory.openSession();
		tr = session.beginTransaction();
		session.save(logParcel);
		tr.commit();
		session.close();
	}
	
	/**
	 * 返回所有包裹日志
	 */
	public List<LogParcel> getAllLogParcel(){
		Session session=sessionFactory.openSession();
		tr=session.beginTransaction();
		Criteria c=session.createCriteria(LogParcel.class);
		List<LogParcel> logParcels=c.list();
		tr.commit();
		session.close();
		return logParcels;
	}
	
	/**
	 * 根据包裹ID返回所有包裹日志
	 */
	public List<LogParcel> getByParcelID(int parcelID){
		Session session=sessionFactory.openSession();
		tr=session.beginTransaction();
		Criteria c=session.createCriteria(LogParcel.class);
		c.add(Restrictions.eq("parcel", packageDao.getPackageDetailsByID(parcelID)));
		c.addOrder(Order.desc("time"));
		List<LogParcel> logParcels=c.list();
		tr.commit();
		session.close();
		return logParcels;
	}
	
	/**
	 * 通过包裹日志ID返回指定包裹日志
	 * 
	 * @return
	 */
	public LogParcel getLogParcelById(int logParcelID) {
		Session session = sessionFactory.openSession();
		tr = session.beginTransaction();
		LogParcel logParcel = (LogParcel) session.get(LogParcel.class, logParcelID);
		tr.commit();
		session.close();
		return logParcel;
	}
}
